import os

import mmcv
# using a pre-trained detector. 预训练配置
from mmcv import Config
from glob import glob
import time



# 找到 最新文件
def find_max_flie(src_dir):

    # src_dir = './root/'  # 文件路径

    src_file_list = glob(src_dir + ("/*.pth"))  # glob获得路径下所有文件，可根据需要修改

    time_list = []  # 时间
    file_dirlist = []  # 文件 名字

    for srcfile in src_file_list:
        print(srcfile)
        print(os.path.getmtime(srcfile))  # 输出最近修改时间

        print(time.ctime(os.path.getmtime(srcfile)))  # 以struct_time形式输出最近修改时间

        time_list.append(os.path.getmtime(srcfile))  # 时间

        file_dirlist.append(srcfile)  # 名字

    print(time_list)
    if len(time_list)>0:
        time_list_max = time_list.index(max(time_list))  # 要复制 文件的下标

        srcfile = file_dirlist[time_list_max]  # 要复制 文件的下标 地址

        print(srcfile)

        return srcfile
    else:
        return 0






# root_path=r"/project/train/src_repo/mmdetection/" # 要改的

root_path=r"/project/train/src_repo/mmdetection/" # 要改的

cfg_path=root_path+'configs/swin/tood_swin-s-p4-w12_fpn_mstrain_3x_coco.py'

cfg = Config.fromfile(cfg_path)

from mmdet.apis import set_random_seed, inference_detector, show_result_pyplot

# cfg.load_from = root_path+'checkpoints/yolov3_d53_fp16_mstrain-608_273e_coco_20210517_213542-4bc34944.pth'
 
cfg.device='cuda' # 'ConfigDict' object has no attribute 'device'
 
cfg.work_dir = 'work_dir'
# Set seed thus the results are more reproducible #播种，结果更具可重复性
cfg.seed = 0
set_random_seed(0, deterministic=False)
cfg.gpu_ids = range(1)
 
srcfile=find_max_flie("/project/train/src_repo/mmdetection/work_save_dir/") ## 找到 最新文件
if srcfile!=0: 
    cfg.resume_from=srcfile # 断点继续训练 的权值文件 

num_epoch=500
num_log=1 

cfg.log_config.interval = num_log #打印log 间隔

cfg.evaluation.save_best='auto' # 保存最佳best的pth
cfg.evaluation.interval = 1 # 评估间隔，以减少评估时间

cfg.checkpoint_config.interval = num_log #num_epoch  # 保存间隔:  设置检查点：以降低存储成本
cfg.runner = dict(type='EpochBasedRunner', max_epochs=num_epoch) # ---训练 轮次
 

#训练----------------------------------------------------
from mmdet.datasets import build_dataset
from mmdet.models import build_detector
from mmdet.apis import train_detector


# Build dataset 构建 数据集
print(cfg.data.train)
datasets = [build_dataset(cfg.data.train)]

# Build the detector 构建 识别
model = build_detector(cfg.model)

# Add an attribute for visualization convenience 添加属性以方便可视化，模型的类别
model.CLASSES = datasets[0].CLASSES

# Create work_dir 文件夹
mmcv.mkdir_or_exist(os.path.abspath(cfg.work_dir))

train_detector(model, datasets, cfg, distributed=False, validate=True) # -------进行----训练-----


# # # 查看 评估结果 load tensorboard in colab
# # %load_ext tensorboard
# #
# # # see curves in tensorboard
# # tensorboard --logdir ./tutorial_exps  #--------运行这个看看 数的 曲线



